'use strict'


//用find（）查找
var ul=$('ul.lang')//获取ul
console.log(ul);

var dy=ul.find('.dy');
var swf=ul.find('#swift');
var hsk=ul.find('[name=haskell]');

//如果要从当前节点开始向上查找，使用parent()方法：
var swf=$('#swift');//获得swift

var parent=swf.parent(); // 获得Swift的上层节点<ul>
var a=swf.parent('.red'); // 获得Swift的上层节点<ul>，同时传入过滤条件。如果ul不符合条件，返回空jQuery对象

//对于位于同一层级的节点，可以通过next()和prev()方法，例如：
var swift=$('#swift');
swift.next();
swift.next('[name=haskell]')// 空的jQuery对象，因为Swift的下一个元素Scheme不符合条件[name=haskell]

swift.prev(); // Python
swift.prev('.dy'); // Python，因为Python同时符合过滤器条件.dy

/* //过滤   和函数式编程的map、filter类似，jQuery对象也有类似的方法。

filter()方法可以过滤掉不符合选择器条件的节点： */

var langs=$('ul.lang li')//拿到javascript,python,swift,scheme haskell

var a=langs.filter('.dy') //拿到javascript python,scheme

//或者传入一个函数，要特别注意函数内部的this被绑定为DOM对象，不是jQuery对象：

var langs=$('ul.lang li') //拿到javascript,python,swift,scheme haskell
langs.filter(function () {
    return this.innerHTML.indexOf('s')===0;//返回s开头的节点
})  //拿到swift,scheme



//map()方法把一个jquery对象包含的若干DOM节点转化为其他对象：

var langs=$('ul.lang li');//拿到javascript,python,swift,scheme haskell
var arr=langs.map(function () {

    return this.innerHTML;
    
}).get();//用get（）拿到包含string的Array：['javascript','pyhton','swift','scheme','haskell']



//此外，一个jQuery对象如果包含了不止一个DOM节点，first()、last()和slice()方法可以返回一个新的jQuery对象，把不需要的DOM节点去掉：

var langs=$('ul.lang li');//拿到javascript,python,swift,scheme haskell

var js=langs.first();//拿到javascript ,相当于$('ul.lang li:first-child') 就如下面一样

var jss=$('ul.lang li:first-child')
console.log(jss);

//slice()
var sub=langs.slice(2,4);//swift,scheme ,参数和数组的slice（）方法一致
